关于e^x的C程序 高手快来帮帮忙啊

来源:百度知道 编辑:UC知道 时间:2024/05/02 17:53:02
老师布置了作业 就是用公式( e^x=x^n/n! 从n=0到n=无穷求和 )
然后写2个程序 一个用单精度 一个用双精度 并用库函数写个程序 把前2个程序和第三个程序比较 进行误差分析 运行时间分析

自己写的程序如下
单精度
#include <stdio.h>
#include <math.h>
void main()
{
float a=1,b=1;
int i,x;
scanf("%d",&x);
for(i=1;b<=exp(x);i++)
{
a=a*(float)x/(float)i;
b=b+a;

}
printf("%f",b);
}

双精度
#include <stdio.h>
#include <math.h>
void main()
{
double a=1,b=1;
int i,x;
scanf("%d",&x);
for(i=1;b<=exp(x);i++)
{
a=a*(double)x/(double)i;
b=b+a;

}
printf("%lf",b);
}

问题就是 我输入负数 结果都是1.000000 双精度的程序 我输入5 和10 没有结果
输入1 4 9 14 15都有结果
请高手帮忙看看

x为负数时,exp(x)<1,不满足循环条件,所以输出b值 1.000000

输入5 和10 ,程序进入死循环,没有结果。

你在程序里本来就只考虑了 x 是整数的情况,你可以写成这样:

float m_exp(int x)
{
float a=1,b=1;
int i;

if(x<0)
{
return 1.0/m_exp(-x);
}

for(i=1;b<=exp(x);i++)
{
a=a*(float)x/(float)i;
b=b+a;
}
return b;
}

至于你说输入 5 和 10 没结果,我这里倒是没有这情况。

我来帮你 洋洋。。。。
输入负数当然没结果
因为 你把 b 初始值设为 1 ,而for()循环中的条件是b<=exp(x),
当x为负数时,exp(x)肯定是小于1的,于是b>exp(x),这样就造成一开始就跳出for()循环,不执行里面的语句。